package controleCliente;

import java.sql.SQLException;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.ListModel;

import bean.Estado;
import bean.Util;
import clienteQuery.Cliente;
import clienteQuery.ClienteDAO;
import erro.Mensagem;
import evento.EventoClienteForm;
import view.ClienteFormJanela;

public class ClienteFormBO {
	private static ClienteFormBO instance = null;
	private final static ClienteFormJanela jForm = new ClienteFormJanela();

	public static final int SALVAR_CLIENTE =  1;
	public static final int EDITAR_CLIENTE =  2;
	public static final int EXISTE_NOME =  3;
	public static final int EXISTE_CPF =  4;
	public static final int EXISTE_RG =  5;
	public static final int EXISTE_EMAIL =  6;
	
	private ClienteFormBO() {
		preencheComboUf();
	}
	
	public static ClienteFormBO getInstance(){
		if(instance == null){
			instance = new ClienteFormBO();
			EventoClienteForm.setEventoClienteForm(jForm);
		}
		return instance;
	}
	
	public void criaJanelaForm(){
		
		jForm.pack();
		jForm.setVisible(true);
	}
	
	private Cliente getClienteForme(){
		Cliente cliente = new Cliente();
		cliente.setId(jForm.getId());
		cliente.setNome(jForm.getJTextFieldNome().getText().trim());
		cliente.setContato(jForm.getJTextFieldContato().getText().trim());
		cliente.setCnpjCpf(jForm.getJTextFieldCnpjCpf().getText().trim());
		cliente.setRgIe(jForm.getJTextFieldRgIe().getText().trim());
		cliente.setEndereco(jForm.getJTextFieldEnder().getText().trim());
		cliente.setBairro(jForm.getJTextFieldBairro().getText().trim());
		cliente.setMunicipio(jForm.getJTextFieldMunic().getText().trim());
		
		cliente.setEstado((Estado)jForm.getJListEstados().getSelectedItem());
		cliente.setCep(jForm.getJTextFieldCep().getText().trim());
		cliente.setTelefone(jForm.getJTextFieldTelef().getText().trim());
		cliente.setFax(jForm.getJTextField1Fax().getText().trim());
		cliente.setCelular(jForm.getJTextFieldCelular().getText().trim());
		cliente.setEmail(jForm.getJTextFieldEmail().getText().trim());
		cliente.setPai(jForm.getJTextFieldPai().getText().trim());
		cliente.setMae(jForm.getJTextFieldMae().getText().trim());
		cliente.setConjugue(jForm.getJTextFieldConjugue().getText().trim());
		cliente.setProfissao(jForm.getJTextFieldProfis().getText().trim());
		cliente.setNascido(jForm.getJTextFieldNasc().getText());
		return cliente;
	}
	
	public void setSelectIndexEstado(int index){
	if(instance!=null){
		jForm.getJListEstados().setSelectedIndex(index);
	}
	}
	
	public void addCliente(){
		if(instance!=null){
			boolean status =false;
	
			if( existe(EXISTE_NOME,this.getClienteForme(),"NOME ",jForm)||
						existe(EXISTE_CPF,this.getClienteForme(),"CPF ",jForm)){
					status= true;
			}

			try {
				if(!status)
				ClienteDAO.getinstancia().add(tiraMascara(this.getClienteForme()));
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				
				JOptionPane.showMessageDialog(null, e.getLocalizedMessage()+ "\n Entre em contato com o administrador do sistema.");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				
				JOptionPane.showMessageDialog(null, e.getLocalizedMessage()+ "\n Entre em contato com o administrador do sistema.");
			}
		
			
			
		}
	}
	
	public void salvarCliente(){
		if(this.getClienteForme().getId()>0){
			setCliente();
		
		}else if(this.getClienteForme().getId()==0){
			addCliente();
			
		}
		
	}
	
	public void setCliente(){
		if(instance!=null){
			boolean status =false;
	
			if( existe(EXISTE_NOME,this.getClienteForme(),"NOME ",jForm)){
				status=existe(EXISTE_CPF,this.getClienteForme(),"CPF ",jForm);
				
			}
			
			try {
				if(!status)
				ClienteDAO.getinstancia().editar(tiraMascara(this.getClienteForme()));
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				
				JOptionPane.showMessageDialog(null, e.getLocalizedMessage()+ "\n Entre em contato com o administrador do sistema.");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				
				JOptionPane.showMessageDialog(null, e.getLocalizedMessage()+ "\n Entre em contato com o administrador do sistema.");
			}
		
			
			
		}
	}
	
		
	
	
	public void setClienteForm(Cliente cliente){
		if(instance!=null ){
			boolean status =false;
			jForm.setId(cliente.getId());
			jForm.getJTextFieldNome().setText(cliente.getNome());
			jForm.getJTextFieldContato().setText(cliente.getContato());
			jForm.getJTextFieldCnpjCpf().setText(cliente.getCnpjCpf());
			jForm.getJTextFieldRgIe().setText(cliente.getRgIe());
			jForm.getJTextFieldEnder().setText(cliente.getEndereco());
			jForm.getJTextFieldBairro().setText(cliente.getBairro());
			jForm.getJTextFieldMunic().setText(cliente.getMunicipio());
			jForm.getJListEstados().setSelectedItem(cliente.getEstado());
			jForm.getJTextFieldCep().setText(cliente.getCep());
			jForm.getJTextFieldTelef().setText(cliente.getTelefone());
			jForm.getJTextField1Fax().setText(cliente.getFax());
			jForm.getJTextFieldCelular().setText(cliente.getCelular());
			jForm.getJTextFieldEmail().setText(cliente.getEmail());
			jForm.getJTextFieldPai().setText(cliente.getPai());
			jForm.getJTextFieldMae().setText(cliente.getMae());
			jForm.getJTextFieldConjugue().setText(cliente.getConjugue());
			jForm.getJTextFieldProfis().setText(cliente.getProfissao());
			jForm.getJTextFieldDataCad().setText(Util.formatDatadd_mm_aaaaa(cliente.getCadastro()));
			jForm.getJTextFieldNasc().setText( cliente.getNascido());
			
			
		
			
			
		}
	}
	
	public Cliente tiraMascara(Cliente cliente){
		String aux = cliente.getCep();
		
		if(aux != null && !aux.isEmpty()){
			cliente.setCep(aux.replaceAll("[\\D]", ""));
		}
		
		aux = cliente.getCelular();
		if(aux != null && !aux.isEmpty()){
			cliente.setCelular(aux.replaceAll("[\\D]", ""));
		}
		
		aux = cliente.getFax();
		if(aux != null && !aux.isEmpty()){
			cliente.setFax(aux.replaceAll("[\\D]", ""));
		}

		aux = cliente.getTelefone();
		if(aux != null && !aux.isEmpty()){
			cliente.setTelefone(aux.replaceAll("[\\D]", ""));
		}

		System.out.print(cliente.getTelefone()+cliente.getFax()+cliente.getCelular()+cliente.getCep());
		return cliente;
	}
	
	public boolean existe(int oQue,Cliente cliente,String campo,ClienteFormJanela jForm){
		
		switch (oQue) {
		case EXISTE_NOME:
			
			if(cliente.getNome().isEmpty()){
				Mensagem.mensagem(Mensagem.WARNING_MESSAGE_ADVERT_OBRIG,cliente.getNome(),campo );
				
				jForm.getJTextFieldNome().requestFocus();  
			
				return true;
			}
			
			break;
		case EXISTE_CPF:
			
			try {
				int id =(ClienteDAO.getinstancia().isCnpjCpf(cliente));
					if((id != 0 &&  cliente.getId()==0) || (id != 0 &&  cliente.getId()!=id)){
						Mensagem.mensagem(Mensagem.WARNING_MESSAGE_ADVERT_REPET,cliente.getCnpjCpf(),campo );
						
						jForm.getJTextFieldCnpjCpf().requestFocus();  
						return true;
					}
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			break;
		case EXISTE_RG:
			
			try {
					if((ClienteDAO.getinstancia().isRgIe(cliente)) != 0){
						Mensagem.mensagem(Mensagem.WARNING_MESSAGE_ADVERT_REPET,cliente.getRgIe(), campo);
						jForm.getJTextFieldRgIe().requestFocus(); 
						return true;
					}
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			break;	
		case EXISTE_EMAIL:
			
			try {
					if((ClienteDAO.getinstancia().isEmail(cliente)) != 0){
						Mensagem.mensagem(Mensagem.WARNING_MESSAGE_ADVERT_REPET,cliente.getEmail(), campo);
						jForm.getJTextFieldEmail().requestFocus(); 
						return true;
					}
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			break;
		
		default:
			return false;
		}
		return false;
	}
	
	/*
	
	public boolean validaCampos(Cliente cliente, int acao){
		boolean umDeuErrado = false;
		
		if(cliente.getCnpjCpf() != null && !campoVazio(cliente.getCnpjCpf())){
			if(existe(EXISTE_CPF, cliente,"CPF/CNPJ")){
				umDeuErrado = true;
			}
		}
		
		if(!umDeuErrado    &&    cliente.getRgIe() != null   &&  !campoVazio(cliente.getRgIe())){
			if(existe(EXISTE_RG, cliente ,"IE/RG")){
				umDeuErrado = true;
			}
		}
		
		if(!umDeuErrado    &&    cliente.getRgIe() != null   &&  !campoVazio(cliente.getRgIe())){
			if(existe(EXISTE_EMAIL, cliente ,"EMAIL")){
				umDeuErrado = true;
			}
		}
				
		
		
		return false;
	}
	*/
	public boolean campoVazio(String nome){
		if(nome == null || nome.trim().isEmpty()){
			return true;
		}
		else 
			return false;
	}
	
	public void preencheComboUf(){
		
		Vector<Estado> estados = null;
		try {
			estados = ClienteDAO.getinstancia().getEstados();
			DefaultComboBoxModel model = new  DefaultComboBoxModel();
			
			int tam = estados.size();
			
			for(int i = 0; i < tam; i++){
				model.addElement(estados.get(i));
			}
					
			jForm.getJListEstados().setModel(model);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
}
